/**
 * Project Name:renshuaipeng-auth
 * File Name:AuthGroupController.java
 * Package Name:ren.renshuaipeng.auth.web
 * Date:2015年12月20日 下午8:25:59
 * Copyright (c) 2015, niao.shuai123@163.com All Rights Reserved.
 */

package ren.renshuaipeng.auth.web.controller;

import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

import ren.renshuaipeng.auth.domain.auth.AuthPermission;
import ren.renshuaipeng.auth.service.auth.AuthPermissionService;
import ren.renshuaipeng.auth.web.BaseController;
import ren.renshuaipeng.util.ajax.AjaxDto;
import ren.renshuaipeng.util.anno.Token;
import ren.renshuaipeng.util.anno.log.OperatorLog;
import ren.renshuaipeng.util.anno.log.OperatorLogType;

/**
 * ClassName: AuthGroupController.java<br/>
 * Function: . <br/>
 * Date: 2015年12月20日 下午8:25:59<br/>
 *
 * @author 任帅鹏（作者）
 * @version V1.00 （版本号）
 * @see
 * @since JDK 1.8
 */
@Controller
@RequestMapping("/admin/permission")
public class AuthPermissionController extends BaseController {

	private static final String PERMISSION_LIST_PAGE = "permission/list";
	private static final String PERMISSION_FORM_PAGE = "permission/form";

	@Autowired
	private AuthPermissionService authPermissionService;

	/**
	 * @Name: index
	 * @Description:
	 * @Author 任帅鹏（作者）
	 * @Version V1.00 （版本号）
	 * @Create Date: 2015-12-16 15:07:21（创建日期）
	 * @Parameters: [pageable, model]
	 * @Return java.lang.String
	 * @Throws
	 */
	@RequestMapping
	public String index(Pageable pageable, Model model) {
		model.addAttribute("page", authPermissionService.findPage(pageable));
		return PERMISSION_LIST_PAGE;
	}

	/**
	 * @Name: savePage
	 * @Description:
	 * @Author 任帅鹏（作者）
	 * @Version V1.00 （版本号）
	 * @Create Date: 2015-12-16 16:01:47（创建日期）
	 * @Parameters: []
	 * @Return java.lang.String
	 * @Throws
	 */
	@RequestMapping(value = "/save")
	@Token(save = true)
	public String savePage(Model model) {
		model.addAttribute("action", "save");
		return PERMISSION_FORM_PAGE;
	}

	/**
	 * @Name: save
	 * @Description:
	 * @Author 任帅鹏（作者）
	 * @Version V1.00 （版本号）
	 * @Create Date: 2015-12-16 16:02:36（创建日期）
	 * @Parameters: [authUser]
	 * @Return ren.renshuaipeng.util.ajax.AjaxDto
	 * @Throws
	 */
	@RequestMapping(value = "/save", method = RequestMethod.POST)
	@Token(remove = true)
	@OperatorLog(getInfo = "新增权限", getType = OperatorLogType.SAVE)
	public String save(AuthPermission authPermission, RedirectAttributes redirectAttributes) {
		authPermission.setAuthEnable(true);//默认启用
		authPermissionService.save(authPermission);
		redirectAttributes.addFlashAttribute("info", new AjaxDto("添加成功"));
		return "redirect:/admin/permission/save";
	}

	/**
	 * @Name: updatePage
	 * @Description:
	 * @Author 任帅鹏（作者）
	 * @Version V1.00 （版本号）
	 * @Create Date: 2015-12-16 16:02:55（创建日期）
	 * @Parameters: []
	 * @Return java.lang.String
	 * @Throws
	 */
	@RequestMapping(value = "/update/{id}")
	@Token(save = true)
	public String updatePage(@PathVariable("id") String id, Model model) {
		model.addAttribute("action", "update");
		model.addAttribute("permission", authPermissionService.findById(id));
		return PERMISSION_FORM_PAGE;
	}

	/**
	 * @Name: update
	 * @Description:
	 * @Author 任帅鹏（作者）
	 * @Version V1.00 （版本号）
	 * @Create Date: 2015-12-16 16:03:06（创建日期）
	 * @Parameters: [authUser]
	 * @Return java.util.Map
	 * @Throws
	 */
	@RequestMapping(value = "/update", method = RequestMethod.POST)
	@Token(remove = true)
	@OperatorLog(getInfo = "编辑权限", getType = OperatorLogType.UPDATE)
	public String update(@ModelAttribute("permission") AuthPermission authPermission,
			RedirectAttributes redirectAttributes) {
		authPermissionService.save(authPermission);
		redirectAttributes.addFlashAttribute("info", new AjaxDto("编辑成功"));
		return "redirect:/admin/permission/update/" + authPermission.getId();
	}

	/**
	 * 所有RequestMapping方法调用前的Model准备方法, 实现Struts2
	 * Preparable二次部分绑定的效果,先根据form的id从数据库查出User对象,再把Form提交的内容绑定到该对象上。
	 * 因为仅update()方法的form中有id属性，因此仅在update时实际执行.
	 */
	@ModelAttribute
	public void getPermission(@RequestParam(value = "id", defaultValue = "") String id, Model model) {
		if (StringUtils.isNoneBlank(id)) {
			model.addAttribute("permission", authPermissionService.findById(id));
		}
	}

	/**
	 * @Name: delete
	 * @Description:
	 * @Author 任帅鹏（作者）
	 * @Version V1.00 （版本号）
	 * @Create Date: 2015-12-16 16:03:14（创建日期）
	 * @Parameters: [id]
	 * @Return java.util.Map
	 * @Throws
	 */
	@RequestMapping(value = "/delete/{id}", method = RequestMethod.POST)
	@ResponseBody
	@OperatorLog(getInfo = "删除权限", getType = OperatorLogType.DELETE)
	public AjaxDto delete(@PathVariable("id") String id) {
		authPermissionService.delete(id);
		return new AjaxDto();
		// throw new SQLException("1");
	}
}
